const Product = require("../../models/product.model");

class ProductService {
  async create(product) {
    const res = await Product.create(product);
    return res.dataValues;
  }
  async findAllProduct(pageNum, pageSize) {
    const offset = (pageNum - 1) * pageSize;
    const { count, rows } = await Product.findAndCountAll({
      offset: offset,
      limit: pageSize * 1,
    });

    return {
      pageNum,
      pageSize,
      total: count,
      list: rows,
    };
  }

  async delProduct(id) {
    const res = await Product.destroy({ where: { id } });

    return res > 0 ? true : false;
  }

  async findAProduct({ id }) {
    const res = await Product.findOne({ where: { id } });

    return res !== null ? res : null;
  }

  async updateById({ id, title, introduction, detail, cover, editTime }) {
    try {
      // console.log(id, user_name, gender, introduction);

      // 验证 id 是否存在
      if (!id) {
        throw new Error("更新产品信息时必须提供 id");
      }

      // 定义更新条件
      const whereOptions = { id };
      // 存储需要更新的用户信息
      const updatedProduct = {};

      // 添加非空字段到 updatedUser 对象
      if (title) Object.assign(updatedProduct, { title });
      if (introduction) Object.assign(updatedProduct, { introduction });
      if (detail) Object.assign(updatedProduct, { detail });
      if (cover) Object.assign(updatedProduct, { cover });
      if (editTime) Object.assign(updatedProduct, { editTime });

      // 执行数据库更新操作
      const result = await Product.update(updatedProduct, {
        where: whereOptions,
      }); // 根据更新结果返回布尔值
      return result[0] > 0;
    } catch (error) {
      // 处理错误
      console.error("更新产品信息时出现错误:", error);
      return false;
    }
  }
}

module.exports = new ProductService();
